﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;
using Log4Net;
using HotelORTExcepciones;

namespace HotelGUI
{
    public partial class Login : Form
    {
        private ISistema sistema =  Dominio.Fabrica.getSistema();
        int reintentos = 0;
        string username = "";
        public Login()
        {
            InitializeComponent();
            reintentos = 0;
        }

        private void btnIngresar_Click(object sender, EventArgs e)
        {
            ILog log = Log4Net.FactoryLogs.getLogInstance();
            int idUsuario=0;
            try
            {
                sistema.login(txtUsuario.Text, txtPassword.Text.Trim());
                idUsuario = sistema.obtenerIdUsuario(txtUsuario.Text.Trim());
                username = txtUsuario.Text;
                GUIVentanaPrincipal vp = new GUIVentanaPrincipal(txtUsuario.Text.Trim(), this);
                vp.Show();
                this.Visible = false;
                reintentos = 0;
                log.info(idUsuario, "Ingreso al Sistema");
                txtPassword.Text = "";
            }
            catch (UsuarioNoValidadoException exUser)
            {
                MessageBox.Show(this, exUser.Message, "Error de Autenticación", MessageBoxButtons.OK, MessageBoxIcon.Error);
                reintentos++;
                if (reintentos > 3)
                {
                    log.warn(idUsuario, "Error de Autenticacion. Mas de 3 reintentos. Usuario " + txtUsuario.Text);
                }

                txtPassword.Text = "";
                txtPassword.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
       
    }
}
